#include "camera.hh"
#include "gl.hh"

static float clamp(float x, float f, float t)
{
	return (x<f ? f : x>t ? t : x);
}

static float lirp(float x, float f, float t)
{
	return x * (t-f) + f;
}

static float clirp(float x, float f, float t)
{
	return lirp(clamp(x, 0, 1), f, t);
}

namespace gl
{
	void camera::update(float step)
	{
		step *= 5;
		cx = clirp(step, cx, dx);
		cy = clirp(step, cy, dy);
		cz = clirp(step, cz, dz);
		cxa = clirp(step, cxa, dxa);
		cza = clirp(step, cza, dza);
		cf = clirp(step/10, cf, df);
	}

	void camera::apply(context& ctx) const
	{
		ctx.fov(cf);
		gl::rotatef(cxa, 1, 0, 0);
		gl::rotatef(cza, 0, 0, 1);
		gl::translatef(cx, cy, cz);
	}
}

